#include "comunicacionPic.h"

int openPort(void){
   int fd, respuesta;
   struct termios newtio;
//	printf("entro 1\n");
   	fd = open("/dev/ttyACM0", O_RDWR | O_NOCTTY);
//	printf("entro 2\n");
   if (fd >= 0){
		bzero((void *)&newtio, sizeof(newtio));
		// Velocidad, paridad, stop, bit, echo ..
		newtio.c_cflag = B9600 | CS8 | CLOCAL | CREAD;
		newtio.c_iflag = IGNPAR | ICRNL;
		newtio.c_oflag = 0;
		newtio.c_lflag = ECHO | ICANON ;
		// Caracteres de control
		newtio.c_cc[VINTR]    = 0;
		newtio.c_cc[VQUIT]    = 0;     
		newtio.c_cc[VERASE]   = 0;    
		newtio.c_cc[VKILL]    = 0;   
		newtio.c_cc[VEOF]     = 4;  
		newtio.c_cc[VSWTC]    = 0; 
		newtio.c_cc[VSTART]   = 0;
		newtio.c_cc[VSTOP]    = 0;
		newtio.c_cc[VSUSP]    = 0;
		newtio.c_cc[VEOL]     = 0;
		newtio.c_cc[VREPRINT] = 0;
		newtio.c_cc[VDISCARD] = 0;
		newtio.c_cc[VWERASE]  = 0;
		newtio.c_cc[VLNEXT]   = 0;
		newtio.c_cc[VEOL2]    = 0;
		// Bloqueo por caracter con tiempo de espera infinito.
		newtio.c_cc[VTIME]    = 0;     
		newtio.c_cc[VMIN]     = 1;
		// Activacion de configuración.
		tcflush(fd, TCIFLUSH);
		respuesta = tcsetattr(fd,TCSANOW,&newtio);
	return (fd);
   }else{
	perror("openPort: No se puede Abrir el puerto /dev/ttyUSB0 - ");
	return (-1);
   }
}

/**************************************************************************************************/

int closePort(int fd){
	if(close(fd) == -1){	
		perror("closePort: No se puede Cerrar el puerto /dev/ttyUSB0 - ");
		return -1;
	}else{
		return 0;
	}
}

/**************************************************************************************************/

int writeData(int fd, int nBytes, unsigned char *sbuf){
	int bytes;
	bytes = write(fd, sbuf, nBytes);					
	if(bytes == -1  || bytes != nBytes){							
		perror("writeData: Error al intentar escribir datos - ");	
		return -1;
	}else{ 
		return 0;
	}
}

/**************************************************************************************************/

int readData(int fd, int nBytes, unsigned char *sbuf){
	tcflush(fd, TCIFLUSH);
	int bytes;
	bytes = read(fd, sbuf, nBytes);						
	if(bytes == -1 || bytes != nBytes){
		perror("readData: Error al intentar leer lo datos - ");
		return -1;
	}else{ 
		
		return 0;
	}
}

